/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.ArrayList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import pojo.Message;
import pojo.Property;

/**
 *
 * @author Snowflake
 */
public class ExecSelectQuery {
    //select * from MaLop where
    //select* from MaLop where
    //select*from MaLop where
    //select *from MaLop where
    public static boolean CheckQuerySelectWithStar(String query, Message message)
    {
        boolean result = true;
        String temp = query;
        temp = ExecQuery.trimMoreSpace(temp);
        temp = ExecQuery.trimSpaceAroundComma(temp);                        
        
        try
        {
            //Kiểm tra query rỗng
            if(temp == "")
            {
                message.setMessage("Query not exist");
                return false;
            }                        
            String[] strSplit = temp.split(" ");
            System.out.println(strSplit.length);
            //Kiểm tra trường hợp * không dính vào select và from
                   //Trường hợp có tồn tại mệnh đề where
            if(strSplit.length>4 && strSplit[0].equalsIgnoreCase("select") && strSplit[2].equalsIgnoreCase("from") && strSplit[1].equalsIgnoreCase("*"))
            {                
                ArrayList<String> splitWhere = ExecQuery.splitWhere(temp);
                if(splitWhere.size()==2)
                {                       
                    return true;                    
                }
                else
                {                 
                    message.setMessage("error in component 'where'");
                    return false;
                }                          
            }
                //trường hợp không tồn tại mệnh đề where
            else if(strSplit.length==4 && strSplit[0].equalsIgnoreCase("select") && strSplit[2].equalsIgnoreCase("from") && strSplit[1].equalsIgnoreCase("*")){
                return true;
            }
            
            //Kiểm tra trường hợp * dính vào select và from
                //Trường hợp tồn tại mệnh đề where
            else if (strSplit.length >2 && strSplit[0].equalsIgnoreCase("select*from") ) 
            {
                ArrayList<String> splitWhere = ExecQuery.splitWhere(temp);
                if(splitWhere.size()==2)
                {                                        
                    return true;
                }
                else
                {                 
                    message.setMessage("error in component 'where'");
                    return false;
                }                          
            }
                //Kiểm tra trường hợp không có mệnh đề where
            else if(strSplit.length==2 && strSplit[0].equalsIgnoreCase("select*from"))
            {                
                return true;
            }
            
            //Kiểm tra trường hợp * dính vào select nhưng không dính vào from
                //Kiểm tra tồn tại mệnh đề where : select* from A where a='b'
            else if (strSplit.length>3&&strSplit[0].equalsIgnoreCase("select*")&&strSplit[1].equalsIgnoreCase("from"))
             {
                 ArrayList<String> splitWhere = ExecQuery.splitWhere(temp);
                if(splitWhere.size()==2)
                {                                        
                    return true;
                }
                else
                {                 
                    message.setMessage("error in component 'where'");
                    return false;
                }                          
             }                 
                //Kiểm tra khi không tồn tại where
            else if (strSplit.length==3&&strSplit[0].equalsIgnoreCase("select*")&&strSplit[1].equalsIgnoreCase("from"))
             {                 
                 return true;
             }
                
             //Kiểm tra trường hợp * dính với from nhưng không dính với select
                //Kiểm tra trường hợp tồn tại mệnh đề where : select *from A where a='b'
            else if(strSplit.length>3 && strSplit[0].equalsIgnoreCase("select")&&strSplit[1].equalsIgnoreCase("*from"))
             {
                 ArrayList<String> splitWhere = ExecQuery.splitWhere(temp);
                if(splitWhere.size()==2)
                {                                        
                    return true;
                }
                else
                {                 
                    message.setMessage("error in component 'where'");
                    return false;
                }
             }
                //Kiểm tra trường hợp không tồn tại mệnh đề where
            else if(strSplit.length==3 && strSplit[0].equalsIgnoreCase("select")&&strSplit[1].equalsIgnoreCase("*from"))
             {                 
                 return true;
             }
                
            //Kiểm tra mệnh đề select bị lỗi
            else if(!(strSplit[0].equalsIgnoreCase("select")||strSplit[0].equalsIgnoreCase("select*from")
                    ||strSplit[0].equalsIgnoreCase("select*")))            
            {
                message.setMessage("error in component 'select' or 'from'");
                return false;
            }
            //Kiểm tra mệnh đề from bị lỗi
            else if(!(strSplit[2].equalsIgnoreCase("from")||strSplit[1].contentEquals("*from")||strSplit[1].equalsIgnoreCase("from")||strSplit[0].equalsIgnoreCase("select*from")))
            {
                message.setMessage("error in component 'from'");
                return false;
            }
            else 
            {
                message.setMessage("Error SQL query!");
                return false;
            }
            
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        return result;
    }
}
